package OBSZARY_def;

import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.util.LinkedList;
import java.util.TreeMap;

import javax.swing.Timer;

import A002_Obrazek._A_OBRAZEK;
import Root.DO_Start_AObrazek;
import Root._B_SZUKAJ_BUFF_A_OBRAZEK;
import Root._punktData;

/**
 * @param pkt1 - lgr
 * @param pkt2 - ldr
 * @param pkt3 - pgr
 * @param pkt4 - pdr
 */
public abstract class _obszarR4 extends _obszar implements GO{

	/**
	 * @return the _nazwaObszaru
	 */
	public synchronized String get_nazwaObszaru() {
		return _nazwaObszaru;
	}

	/**
	 * @param _nazwaObszaru the _nazwaObszaru to set
	 */
	public synchronized void set_nazwaObszaru(String _nazwaObszaru) {
		this._nazwaObszaru = _nazwaObszaru;
	}

	/**
	 * @return the _obszar
	 */
	public synchronized Rectangle get_obszar() {
		return _obszar;
	}

	/**
	 * @param _obszar the _obszar to set
	 */
	public synchronized void set_obszar(Rectangle _obszar) {
		this._obszar = _obszar;
	}

	/**
	 * @return the buff
	 */
	public synchronized BufferedImage getBuff() {
		return buff;
	}

	/**
	 * @param buff the buff to set
	 */
	public synchronized void setBuff(BufferedImage buff) {
		this.buff = buff;
	}
	
	
	public synchronized boolean is_flaga() {
		return _flaga;
	}

	public synchronized void set_flaga(boolean _flaga) {
		this._flaga = _flaga;
	}


	private static final long serialVersionUID = 1L;

	private _B_SZUKAJ_BUFF_A_OBRAZEK _szukaczLocal;
	private String _nazwaObszaru;
	private Rectangle _obszar;
	private BufferedImage buff;
	private boolean _flaga;
	protected _punktData pkt1;
	protected _punktData pkt2;
	protected _punktData pkt3;
	protected _punktData pkt4;
	public int X1, Y1, X2, Y2;
	
	protected DO_Start_AObrazek _st;
	protected ENUM_obszary e = null;
	private TreeMap<String, _punktData> daneString= new TreeMap<String, _punktData>();
	private TreeMap<Integer, _punktData> daneInteger= new TreeMap<Integer, _punktData>();

	
	synchronized final TreeMap<String, _punktData> getDaneString() {
		return daneString;
	}

	synchronized final void setDaneString(TreeMap<String, _punktData> dane) {
		this.daneString = dane;
	}
	
	


	synchronized final TreeMap<Integer, _punktData> getDaneInteger() {
		return daneInteger;
	}

	synchronized final void setDaneInteger(TreeMap<Integer, _punktData> daneInteger) {
		this.daneInteger = daneInteger;
	}
	


	Timer ti = new Timer(5000, new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent e) {

		}
	});
	

	public _obszarR4(String str, DO_Start_AObrazek st) {
		this._nazwaObszaru = str;
		this._st = st;
		set_flaga(true);
	}
	
	public void aktywujObszar(){
		_szukaczLocal = new _B_SZUKAJ_BUFF_A_OBRAZEK(_st._AktywnyObszarMonitora);

		try{
			e = ENUM_obszary.valueOf(this._nazwaObszaru);
		} catch (IllegalArgumentException err){
			System.err.println("ENUM NIE JEST ZDEFIFINIOWANY OBSZAR " + _nazwaObszaru);
		};
		if (e!=null){
			_st._szukacz._FF_String_1obraz(_st._zrzut3(null), _st._DaneSTR, 0, 0, e._get_lgrObr(), e._get_ldrObr(), e._get_pgrObr(), e._get_pdrObr());
			
			try{this.pkt1 = _st._DaneSTR.get(e._get_lgr());}catch(NullPointerException err){this.pkt1=null; err.getMessage();}
			try{this.pkt2 = _st._DaneSTR.get(e._get_ldr());}catch(NullPointerException err){this.pkt2=null; err.getMessage();}
			try{this.pkt3 = _st._DaneSTR.get(e._get_pgr());}catch(NullPointerException err){this.pkt3=null; err.getMessage();}
			try{this.pkt4 = _st._DaneSTR.get(e._get_pdr());}catch(NullPointerException err){this.pkt4=null; err.getMessage();}
		}
		
		System.out.println("Inicjalizuję obszar R2 " );
		try{
			_obszar = new Rectangle(
					pkt1.ix, 
					pkt1.iy, 
					(pkt4.ix + pkt4.getEl()._obrazekOrgSZER) - pkt1.ix, 
					(pkt4.iy + pkt4.getEl()._obrazekOrgWYS) - pkt1.iy );
			
			X1 = _obszar.x;
			Y1 = _obszar.y;
			X2 = _obszar.x+_obszar.width;
			Y2 = _obszar.y+_obszar.height;
			_flaga = true;
						
		}catch(NullPointerException e1){
			System.err.println ("R2 BRAK OBSZARU1 " + _nazwaObszaru);
			_obszar = null;
			_flaga = false;
			
			try{
				new Rectangle(
						pkt2.getX(), 
						pkt2.getY() + pkt4.getEl()._obrazekOrgWYS,
						pkt2.getX() - (pkt3.getX() + pkt3.getEl()._obrazekOrgSZER), //szer.
						(pkt2.getY() + pkt4.getEl()._obrazekOrgWYS) - pkt3.getY()); //wysokosc
				
				X1 = _obszar.x;
				Y1 = _obszar.y;
				X2 = _obszar.x+_obszar.width;
				Y2 = _obszar.y+_obszar.height;
				_flaga = true;
				
			}catch(NullPointerException e2){
				System.err.println ("R2 BRAK OBSZARU2 " + _nazwaObszaru);
				_obszar = null;
				_flaga = false;
				try{
					_obszar = new Rectangle(
							pkt1.ix, 
							pkt1.iy, 
							pkt1.getEl()._obrazekOrgSZER, 
							pkt1.getEl()._obrazekOrgWYS);
					X1 = _obszar.x;
					Y1 = _obszar.y;
					X2 = _obszar.x+_obszar.width;
					Y2 = _obszar.y+_obszar.height;
					_flaga = true;

				}catch(NullPointerException e3){
					System.err.println ("R1 BRAK OBSZARU1 " + this._nazwaObszaru);
					System.err.println (e3.getMessage());
					_obszar = null;
					_flaga = false;
					return;
				}
				return;
			}
		}
		
		System.out.println("Załadowałem obszar " + _nazwaObszaru + " " + _obszar.toString());

		if (_obszar!=null){
			buff = new BufferedImage(_obszar.width, _obszar.height, 5);
		} else {
			buff = null;
		}
	}
	
	
	 public abstract void go();

	/**
	 * @param _ZrzutZewnetrzny
	 * @param dane
	 * @param Xodniesienia
	 * @param Yodniesienia
	 * @param iobrazki
	 * @return
	 * @see Root._B_SZUKAJ_BUFF_A_OBRAZEK#_FF_String_1obraz(java.awt.image.BufferedImage, java.util.TreeMap, int, int, A002_Obrazek._A_OBRAZEK[])
	 */
	protected synchronized TreeMap<String, _punktData> _FF_String(
			BufferedImage _ZrzutZewnetrzny, TreeMap<String, _punktData> dane,
			int Xodniesienia, int Yodniesienia, _A_OBRAZEK... iobrazki) {
		return _szukaczLocal._FF_String_1obraz(_ZrzutZewnetrzny, dane, Xodniesienia,
				Yodniesienia, iobrazki);
	}

	public TreeMap<Integer, _punktData> _FF_Integer(
			BufferedImage _ZrzutZewnetrzny, TreeMap<Integer, _punktData> dane,
			int Xodniesienia, int Yodniesienia, _A_OBRAZEK... iobrazki) {
		return _szukaczLocal._FF_Integer(_ZrzutZewnetrzny, dane, Xodniesienia,
				Yodniesienia, iobrazki);
	}


}
